package com.ledi.guns.modular.ledipay.controller;

import io.swagger.annotations.Api;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.plugins.Page;
import com.ledi.guns.common.annotion.Permission;
import com.ledi.guns.common.persistence.model.ClassInfo;
import com.ledi.guns.common.persistence.model.vo.BillDetailVo;
import com.ledi.guns.core.base.controller.BaseController;
import com.ledi.guns.core.base.tips.SuccessTip;
import com.ledi.guns.core.base.tips.Tip;
import com.ledi.guns.modular.ledipay.controller.req.billDetaile.QueryBillDetaileInfo;
import com.ledi.guns.modular.ledipay.service.IBillDetaileService;

/**
 * 账单明细控制器
 *
 * @author fengshuonan
 * @Date 2017-11-30 10:48:13
 */
@Api
@RestController
@RequestMapping("/billDetaile")
public class BillDetaileController extends BaseController {

	@Autowired
	private IBillDetaileService billDetaileService;

	/**
	 * @api {POST} /billDetaile/billDetaileList 账单明细列表（仅显示当前账号管理班级的信息）
	 * @apiGroup billDetaile
	 * @apiName billDetaileList
	 * @apiParam billId 账单编号
	 * @apiParam billName 账单名称
	 * @apiParam payStatus 支付方式（0支付宝、1微信2现金收费3网银转账、4其他）
	 * @apiParam startTime 起始日期
	 * @apiParam endTime 结束日期
	 * @apiParam sendStatus 发送状态（0：发送失败，1：未支付，2：已支付,3：账单关闭 ）
	 * @apiParam parentMobile 家长手机号
	 * @apiParam studentName 学生名字
	 * @apiParam classId 班级
	 * @apiParam pageNo 页码（默认1）
	 * @apiParam pageSize 单页总和数（默认10条）
	 * @apiParam orderBy 排序字段（默认id）
	 * @apiParam orderType 排序规则，ASC：升序，DESC：降序（默认DESC）
	 * @apiSuccess count 数量
	 * @apiSuccess id 账单明细编号
	 * @apiSuccess billDetailId 账单单号
	 * @apiSuccess billName 账单名称
	 * @apiSuccess billCreateTime 账单生成时间
	 * @apiSuccess billEndTime 账单截止时间
	 * @apiSuccess studentName 学生名字
	 * @apiSuccess className 学生班级
	 * @apiSuccess parentMobile 家长手机号
	 * @apiSuccess totalDetail 子账单总额
	 * @apiSuccess payWay 付款方式(ALIPAY:支付宝，WEIXIN:微信支付,CASHS:现金，GIRO:转账，OTHER:其他)
	 * @apiSuccess billStatus 发送状态（-1：导入失败，1：发送中，2：发送成功，3：发送失败，4：撤销账单，5：支付成功，6：缴费成功）
	 * @apiSuccess billStatusName 发送状态名称
	 * @apiSuccess fileReason 发送失败原因
	 * @apiSuccess code 返回编码（200成功）
	 * @apiSuccess message 返回说明
	 * @apiSuccessExample {json} Success-Response:
	 *                    {
	 *                    "code": 200,
	 *                    "data": {
	 *                    "count": 62,
	 *                    "firstResult": 0,
	 *                    "list": [
	 *                    {
	 *                    "billCreateTime": "2017-12-06 20:55:05",
	 *                    "billDetailId": "2017120657243",
	 *                    "billEndTime": "2017-12-30 00:00:00",
	 *                    "billName": "测试009",
	 *                    "billStatus": 2,
	 *                    "billStatusName": "未支付",
	 *                    "classId": "",
	 *                    "className": "小二班",
	 *                    "fileReason": "",
	 *                    "id": 102,
	 *                    "parentMobile": "17664566644",
	 *                    "studentName": "胡小",
	 *                    "totalDetail": 0.22
	 *                    }
	 *                    ],
	 *                    "orderBy": "id",
	 *                    "orderType": "DESC",
	 *                    "pageNo": 1,
	 *                    "pageSize": 10,
	 *                    "search": {
	 *                    "orderType": "DESC",
	 *                    "defaultPageSize": 10,
	 *                    "pageSize": 10,
	 *                    "orderBy": "tbd.id",
	 *                    "firstResult": 0,
	 *                    "billName": "",
	 *                    "classId": "",
	 *                    "pageNo": 1,
	 *                    "billId": "",
	 *                    "studentName": "",
	 *                    "startTime": "",
	 *                    "sendStatus": "",
	 *                    "endTime": "",
	 *                    "parentMobile": ""
	 *                    },
	 *                    "total": 62
	 *                    },
	 *                    "message": "成功"
	 *                    }
	 * @apiVersion 1.3.0
	 */
	@RequestMapping(value = "/billDetaileList", method = RequestMethod.POST)
	@Permission
	public Tip billDetaileList(@RequestBody QueryBillDetaileInfo queryBillDetaileInfo) {

		queryBillDetaileInfo.checkOrder(BillDetailVo.class);
		Page<BillDetailVo> page = billDetaileService.findBillDetaileList(new Page<BillDetailVo>(queryBillDetaileInfo.getPageNo(), queryBillDetaileInfo.getPageSize()),
				queryBillDetaileInfo);
		return SuccessTip.buildSuccess(page);
	}

	/**
	 * @api {GET} /billDetaile/findDetaileList/{id} 账单明细详情
	 * @apiGroup billDetaile
	 * @apiName findDetaileList
	 * @apiParam id 账单明细编码
	 * @apiSuccess id 账单明细编号
	 * @apiSuccess billName 账单名称
	 * @apiSuccess billDetailId 账单单号
	 * @apiSuccess billCreateTime 账单生成时间
	 * @apiSuccess billEndTime 账单截止时间
	 * @apiSuccess studentName 学生名字
	 * @apiSuccess className 学生班级名称
	 * @apiSuccess parentMobile 家长手机号
	 * @apiSuccess totalDetail 子账单总额
	 * @apiSuccess payTime 家长支付时间
	 * @apiSuccess alipayOrderNo 支付编号
	 * @apiSuccess alipayPersonPid 付款人支付宝账号
	 * @apiSuccess billStatus 发送状态（-1：导入失败，1：发送中，2：发送成功，3：发送失败，4：撤销账单，5：支付成功，6：缴费成功）
	 * @apiSuccess billStatusName 发送状态名称
	 * @apiSuccess payWay 付款方式(ALIPAY:支付宝，WEIXIN:微信支付,CASHS:现金，GIRO:转账，OTHER:其他)
	 * @apiSuccess fileReason 发送失败的原因
	 * @apiSuccess code 返回编码（200成功）
	 * @apiSuccess message 返回说明
	 * @apiSuccessExample {json} Success-Response:
	 *                    {
	 *                    "code": 200,
	 *                    "data": {
	 *                    "alipayOrderNo": "",
	 *                    "alipayPersonPid": "",
	 *                    "billCreateTime": "2017-12-06 11:01:33",
	 *                    "billDetailId": "2017120669357",
	 *                    "billEndTime": "2017-12-22 11:03:23",
	 *                    "billName": "123123123",
	 *                    "billStatus": 3,
	 *                    "billStatusName": "发送失败",
	 *                    "className": "小一班",
	 *                    "fileReason": "Business Failed",
	 *                    "id": 57,
	 *                    "parentMobile": "15962123617",
	 *                    "payTime": "",
	 *                    "studentName": "赵胜宽",
	 *                    "totalDetail": 0.03
	 *                    },
	 *                    "message": "成功"
	 *                    }
	 * @apiVersion 1.3.0
	 */
	@RequestMapping(value = "/findDetaileList/{id}", method = RequestMethod.GET)
	@Permission
	public Tip billDetaileUpdate(@PathVariable("id") Long id) {

		BillDetailVo billDetailVo = billDetaileService.findBillDetaileList(id);
		return SuccessTip.buildSuccess(billDetailVo);
	}

	/**
	 * @api {DELETE} /billDetaile/deleteBillDetaile/{id} 删除账单
	 * @apiGroup billDetaile
	 * @apiName deleteBillDetaile
	 * @apiParam id 账单明细编码
	 * @apiSuccess code 返回编码（200成功）
	 * @apiSuccess message 返回说明
	 * @apiSuccessExample {json} Success-Response:
	 *                    {
	 *                    "code": 200,
	 *                    "message": "成功"
	 *                    }
	 * @apiVersion 1.3.0
	 */
	@RequestMapping(value = "/deleteBillDetaile/{id}", method = RequestMethod.DELETE)
	@Permission
	public Tip deleteBillDetaile(@PathVariable("id") Long id) {

		billDetaileService.deleteBillDetaile(id);
		return SuccessTip.buildSuccess();
	}

	/**
	 * @api {PUT} /billDetaile/revokeBillDetaile/{id} 撤销账单
	 * @apiGroup billDetaile
	 * @apiName revokeBillDetaile
	 * @apiParam id 账单明细编码
	 * @apiSuccess code 返回编码（200成功）
	 * @apiSuccess message 返回说明
	 * @apiSuccessExample {json} Success-Response:
	 *                    {
	 *                    "code": 200,
	 *                    "message": "成功"
	 *                    }
	 * @apiVersion 1.3.0
	 */
	@RequestMapping(value = "/revokeBillDetaile/{id}", method = RequestMethod.PUT)
	@Permission
	public Tip revokeBillDetaile(@PathVariable("id") Long id) {

		billDetaileService.revokeBillDetaile(id);
		return SuccessTip.buildSuccess();
	}

	/**
	 * @api {GET} /billDetaile/getClassInfo 查询班级
	 * @apiGroup billDetaile
	 * @apiName getClassInfo
	 * @apiSuccess id 班级ID
	 * @apiSuccess name 班级名称
	 * @apiSuccess code 返回编码（200成功）
	 * @apiSuccess message 返回说明
	 * @apiSuccessExample {json} Success-Response:
	 *                    {
	 *                    "code": 200,
	 *                    "data": [
	 *                    {
	 *                    "id": 6,
	 *                    "name": "小一班"
	 *                    }
	 *                    ],
	 *                    "message": "成功"
	 *                    }
	 * @apiVersion 1.3.0
	 */
	@RequestMapping(value = "/getClassInfo", method = RequestMethod.GET)
	@Permission
	public Tip getClassInfo() {

		List<ClassInfo> ClassInfo = billDetaileService.getClassInfo();
		return SuccessTip.buildSuccess(ClassInfo);
	}

	/**
	 * @api {POST} /billDetaile/addClassInfo 学校新增班级
	 * @apiGroup billDetaile
	 * @apiName addClassInfo
	 * @apiParam name 班级名称
	 * @apiSuccess code 返回编码（200成功）
	 * @apiSuccess message 返回说明
	 * @apiSuccessExample {json} Success-Response:
	 *                    {
	 *                    "code": 200,
	 *                    "message": "成功"
	 *                    }
	 * @apiVersion 1.3.0
	 */
	@RequestMapping(value = "/addClassInfo", method = RequestMethod.POST)
	@Permission
	public Tip addClassInfo(@RequestParam("name") String name) {

		Long id = billDetaileService.saveClassInfo(name);
		return SuccessTip.buildSuccess(id);
	}
}
